/**
 * 浏览器差别方法配置类
 * 默认为IE
 * @class
 */
var system = {    
	isIE         : true,
	isFF         : false,	
	
	/**
	 * 获取触发事件的对象
	 * @function
	 * @param {Event} e 事件对象
	 * @return {Object} 触发事件的对象
	 */
   getEventElement   : function(e) {		 
     if(system.isIE) {  return e.srcElement; }
	 return e.target;
	},
	
	/**
	 * 获取事件的对象
	 * @function
	 * @param {Event} e 事件对象
	 * @return {Object} 事件的对象
	 */
   getEvent   : function(e) {		 
     if(system.isIE) { return window.event; }
	 return e;
	},
	
	/**
	 * 获取元素整个标签
	 * IE直接获取，FireFox是innerHTML然后外面套一层DIV返回
	 * @function
	 * @param {Dom} d dom元素
	 * @return {String} 标签内容
	 */
	getOuterHTML : function(d){
      if ( system.isIE )
      {
		  return d.outerHTML;
      }
	  var pDiv = document.createElement("DIV");
      pDiv.appendChild(d);
	  return pDiv.innerHTML;
	},
	
	/**
	 * 初始化方法
	 * 把上述方法绑定到浏览器中
	 * @function
	 * @return {Boolean} 标签内容
	 */
	initialize : function() {
	    var Browser_Name=navigator.appName;		
        var Browser_Version=parseFloat(navigator.appVersion);       
        
        system.isIE = (Browser_Name=="Microsoft Internet Explorer");
        system.isFF = (Browser_Name=="Netscape");

		if ( system.isFF && window.HTMLElement ){         
            HTMLElement.prototype.__defineSetter__("outerHTML",function(sHTML){
              var r=this.ownerDocument.createRange();
              r.setStartBefore(this);
              var df=r.createContextualFragment(sHTML);
              this.parentNode.replaceChild(df,this);
              return sHTML;
            });

            HTMLElement.prototype.__defineGetter__("outerHTML",function(){
              var attr;
              var attrs=this.attributes;
              var str="<"+this.tagName.toLowerCase();
              for(var i=0;i<attrs.length;i++){
                attr=attrs[i];
                if(attr.specified) str+=" "+attr.name+'="'+attr.value+'"';
              }
              if(!this.canHaveChildren)  return str+">";
              return str+">"+this.innerHTML+"</"+this.tagName.toLowerCase()+">";
            });
        
            HTMLElement.prototype.__defineGetter__("canHaveChildren",function(){
              switch(this.tagName.toLowerCase()){
                case "area":
                case "base":
                case "basefont":
                case "col":
                case "frame":
                case "hr":
                case "img":
                case "br":
                case "input":
                case "isindex":
                case "link":
                case "meta":
                case "param":
                return false;
              }
              return true;
            });
           }
	}
};	

/* global declaration */


/**
 * PageX:鼠标在页面上的位置,从页面左上角开始,即是以页面为参考点,不随滑动条移动而变化（火狐特有）
 * IE返回ClientX:鼠标在页面上可视区域的位置,从浏览器可视区域左上角开始,即是以浏览器滑动条此刻的滑动到的位置为参考点,随滑动条移动 而变化.
 * @function
 * @static
 * @param {Event} e 事件对象
 */
zxt.diff.getPosition = function(e){
	if (e.pageX) {
		return{"X":e.pageX,"Y":e.pageY};
	} else if (e.clientX) {
		return{"X":e.clientX,"Y":e.clientY};
	} else
		return null;
};

/**
 * 访问剪贴板内容
 * @function
 * @static
 * @return {Object} 剪贴板内容
 */
zxt.diff.getClipboard = function(){
	if (window.clipboardData) { 
      return(window.clipboardData.getData('Text')); 
   } 
   else if (zxt.diff.getFirefoxVersion()<=3&&window.netscape) { 
      netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect'); 
      var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard); 
      if (!clip) return; 
      var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable); 
      if (!trans) return; 
      trans.addDataFlavor('text/unicode'); 
      clip.getData(trans,clip.kGlobalClipboard); 
      var str = new Object(); 
      var len = new Object(); 
      try { 
         trans.getTransferData('text/unicode',str,len); 
      } 
      catch(error) { 
         return null; 
      } 
      if (str) { 
         if (Components.interfaces.nsISupportsWString) str=str.value.QueryInterface(Components.interfaces.nsISupportsWString); 
         else if (Components.interfaces.nsISupportsString) str=str.value.QueryInterface(Components.interfaces.nsISupportsString); 
         else str = null; 
      } 
      if (str) { 
         return(str.data.substring(0,len.value / 2)); 
      } 
   } 
   return null; 
};

/**
 * 设置剪贴板内容
 * @function
 * @static
 * @param {String} maintext 需要添加的内容
 * @return {Boolean} 是否添加成功
 */
zxt.diff.setClipboard = function(maintext){
	if (window.clipboardData) { 
      return (zxt.diff.getFirefoxVersion()<=3&&window.clipboardData.setData("Text", maintext)); 
   } 
   else if (window.netscape) { 
      netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect'); 
      var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard); 
      if (!clip) return; 
      var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable); 
      if (!trans) return; 
      trans.addDataFlavor('text/unicode'); 
      var str = new Object(); 
      var len = new Object(); 
      var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString); 
      var copytext=maintext; 
      str.data=copytext; 
      trans.setTransferData("text/unicode",str,copytext.length*2); 
      var clipid=Components.interfaces.nsIClipboard; 
      if (!clip) return false; 
      clip.setData(trans,null,clipid.kGlobalClipboard); 
      return true; 
   } 
   return false; 
};

/**
 * 获得火狐浏览器的版本
 * @function
 * @static
 * @return {Integer} 返回版本号 如果不是火狐浏览器则返回0
 */
zxt.diff.getFirefoxVersion = function(){
	var regStr_ff = /firefox\/[\d.]+/gi;
	var versionstr = /[\d.]+/gi
	var agent = navigator.userAgent.toLowerCase();
	if(agent){
		if(agent.match(regStr_ff)){
			return agent.match(regStr_ff)[0].match(versionstr)[0];
		}
		return 0;
	}
	return 0;
};

            
	

